package org.example.operator;

import java.math.BigDecimal;

/**
 * 用于两个数字操作的抽象类，实现了操作接口
 * @author Silver
 */
public abstract class NumberOperator implements Operator<BigDecimal>{
    /**
     * 数字1
     */
    protected BigDecimal num1;

    /**
     * 数字2
     */
    protected BigDecimal num2;

    public NumberOperator() {
    }

    /**
     * 操作方法
     */
    @Override
    public BigDecimal operator(){
        //前置处理
        beforePostProcess();
        //两个数据进行操作，具体由：加减乘除类实现
        BigDecimal numberOperatorResult = numberOperator(num1, num2);
        //后置处理
        afterPostProcess();
        return numberOperatorResult;
    };

    /**
     * 前置处理，钩子方法，扩展用，可以在数据处理前进行自定义实现
     * @author Silver
     */
    public void beforePostProcess(){
//        System.out.println("----------前置操作-------------");
    }

    /**
     * 后置处理，钩子方法，扩展用，可以在数据处理前进行自定义实现
     * @author Silver
     */
    public void afterPostProcess(){
//        System.out.println("----------后置操作-------------");
    }

    /**
     * 数字操作，抽象方法，具体由加减乘除等类实现
     *
     * @author Silver
      * @param num1 数字1
      * @param num2 数字2
     * @return BigDecimal 计算结果
     */
    public abstract BigDecimal numberOperator(BigDecimal num1, BigDecimal num2);


    public BigDecimal getNum1() {
        return num1;
    }

    public void setNum1(BigDecimal num1) {
        this.num1 = num1;
    }

    public BigDecimal getNum2() {
        return num2;
    }

    public void setNum2(BigDecimal num2) {
        this.num2 = num2;
    }
}
